// 这里封装了axios的所有逻辑
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'
//引入querystring 
import qsString from 'querystring'
/* axios({
    baseURL 
    Headers
    get
}) 

axios.get()
axios.create({
    
}) */

//axios 基础地址
// axios.baseURL
// axios.create()
let config = {
    baseURL: '/api'
}
//定义一个类型
class Http {
    http: AxiosInstance
    constructor(config: AxiosRequestConfig) {
        //给属性赋值一个新建的axios实例
        this.http = axios.create(config)
        //封装拦截器
        this.http.interceptors.request.use(req => req)
        this.http.interceptors.response.use(res => res.data)
        // // 请求拦截器
        this.http.interceptors.request.use(req => {
            // 进行token的验证
            console.log(req, 'req');

            // 全局添加token
            if (req.url != "/api/userlogin") {
                // 需要添加token 不是登录
                if (req && req.headers) {
                    req.headers.authorization = sessionStorage.getItem('userinfo') ? JSON.parse(sessionStorage.getItem('userinfo') || '0').token : null
                }
            }
            return req
        })
    }
    //定义get方法
    get(url: string, params = {}) {
        return this.http.get(url, { params })
    }
    //定义post方法
    post(url: string, params = {}, isFile = false) {
        let data: any = {}
        if (isFile) {
            data = new FormData()
            for (let [key, value] of Object.entries(params)) {
                data.append(key, value)
            }
        } else {
            data = qsString.stringify(params)
        }
        return this.http.post(url, data)
    }
}
//导出类
export default new Http(config)